//Jaycn的PHP缓存类

//PHP代码
<?php    
/**********************************************************   
用法:   
include "./config/connect.php";  //变量都在里面设置了   
$cache=new Cache();   
$cache->startToCacheFile()    //自动处理缓存是否开启以及缓存是否存在,进行相应的处理   
.......   
页面内容   
.......   
$cache->saveToCacheFile();   
**********************************************************/   
     
/*********************************************************************   
*用户需要事先定义的常量：已经在../config/config.php定义   
*_CachePath_        模板缓存路径   
*_CacheEnable_        自动缓存机制是否开启，未定义或为空，表示关闭自动缓存机制   
*_ReCacheTime_        自动重新缓存间隔时间，单位为秒，未定义或为空，表示关闭自动重新缓存   
*********************************************************************/   
     
class Cache    
{    
     
 var $cachefile;    
 var $cachefilevar;    
 var $startTime;    
     
/*********************************************************************   
*生成当前页的Cache组文件名 $this->cachefilevar 及文件名 $this->cachefile   
*动态页的参数不同对应的Cache文件也不同，但是每一个动态页的所有Cache文件都有相同的文件名，只是扩展名不同   
*********************************************************************/   
 function Cache()     
 {    
   $s=array(".","/");$r=array("_","");    
   $this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_];    
   $this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]);    
 }    
     
 /*开始时间   
 function startTimer()    
   {    
       $mtime = microtime ();    
       $mtime = explode (' ', $mtime);    
       $mtime = $mtime[1] + $mtime[0];    
       $this->startTime = $mtime;    
   }      
  //结束时间   
 function endTimer()    
   {    
       $mtime = microtime ();    
       $mtime = explode (' ', $mtime);    
       $mtime = $mtime[1] + $mtime[0];    
       $endtime = $mtime;    
       $totaltime = round (($endtime - $this->startTime), 10); //单位秒   
       return $totaltime;    
   }    
 //缓存所用的时间   
 function spendTime()   
  {   
    return $this->endTimer()*1000;  //单位毫秒   
  }   
  */   
      
 //删除当前页/模块的缓存    
 function cleanCacheFile()     
 {    
   //删除当前页的缓存    
   $d = dir(_CachePath_);    
   $strlen=strlen($this->cachefilevar);    
   //返回当前页的所有Cache文件组    
   while (false !== ($entry = $d->read()))     
    {    
      if (substr($entry,0,$strlen)==$this->cachefilevar)     
      {    
        if (!unlink(_CachePath_."/".$entry))     
       {    
          echo "Cache目录无法写入";    
        exit;    
        }    
          }    
       }    
  }    
     
 //判断是否已Cache过，以及是否需要Cache    
 function checkCacheFile()    
 {    
    //如果设置了缓存更新间隔时间 _ReCacheTime_    
    if (_ReCacheTime_+0>0)           
    {    
       //返回当前页Cache的最后更新时间    
       //cachefilevar);
	   $var=$var[0">$var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];    
        //如果更新时间超出更新间隔时间则删除Cache文件    
        if (time()-$var>_ReCacheTime_)     
      {    
           $this->cleanCacheFile();    
      $ischage=true;    
          }    
      }    
     //返回当前页的Cache    
     $file=_CachePath_."/".$this->cachefile;    
    //判断当前页Cache是否存在 且 Cache功能是否开启    
    return (file_exists($file) and _CacheEnable_ and !$ischange);    
 }    
     
 //读取Cache    
 function echoCache()    
 {    
   //返回当前页的Cache    
   $file=_CachePath_."/".$this->cachefile;    
   //读取Cache文件的内容    
   if (_CacheEnable_)     
    return readfile($file);    
       else     
        return false;    
  }    
     
 //开始缓存    
 function startToCacheFile()    
  {    
    if ($this->checkCacheFile())    
    {    
      //$this->startTimer(); //开始记录直接输出缓存内容所用的时间    
       $this->echoCache();    
    //echo $this->spendTime();//结果记录直接输出缓存内容所用的时间    
    exit;    
      }    
        else     
          {     
         //$this->startTimer(); //开始记录第一次缓存内容所用的时间    
            ob_clean();    
            ob_start();    
            ob_implicit_flush(0);    
      }    
  }    
     
     
 //生成Cache    
 function saveToCacheFile()    
 {     
   //取得当前页面的内容    
  $output = ob_get_contents();    
   //返回当前页的Cache    
   $file=_CachePath_."/".$this->cachefile;    
   //如果Cache功能开启    
    if (_CacheEnable_)     
    {    
        //把输出的内容写入Cache文件    
        $fp=@fopen($file,'w');    
        if (!@fputs($fp,$output))     
       {    
         echo "模板Cache写入失败";    
       exit;    
      }    
        @fclose($fp);    
        //如果设置了缓存更新间隔时间 _ReCacheTime_    
        if (_ReCacheTime_+0>0)     
        {    
           //更新当前页Cache的最后更新时间    
           $file=_CachePath_."/".$this->cachefilevar;    
           $fp=@fopen($file,'w');    
           if (!@fwrite($fp,time()))     
          {    
            echo "Cache目录无法写入";    
            exit;    
          }    
           @fclose($fp);    
        }    
  //$this->spendTime();//结果记录第一次缓存内容所用的时间       
     }    
  }    
     
} //end the cache Class     
?>   
